#pragma once

class Node
{
public:
    Node()
    {
    }
    virtual ~Node()
    {
    }
private:
    Node(const Node & clause); // disable copy-constructor
    Node & operator = (const Node & rhs); // disable copy-assignment
};

class Clause: public Node
{
};

template <typename T>
void FreeAndNull(T* (&t))
{
    if (t)
    {
        delete t;
        t = NULL;
    }
}